Socket API এর ভূমিকা এবং প্রয়োজনীয়তা
Socket API হলো নেটওয়ার্ক প্রোগ্রামিংয়ের একটি মৌলিক ইন্টারফেস, যা ক্লায়েন্ট এবং সার্ভারের মধ্যে ডেটা আদান-প্রদান এবং যোগাযোগ স্থাপন করতে ব্যবহৃত হয়। এটি ক্লায়েন্ট-সার্ভার ভিত্তিক নেটওয়ার্ক অ্যাপ্লিকেশন এবং পরিষেবা তৈরি এবং পরিচালনার জন্য অপরিহার্য। Socket API বিভিন্ন প্রোগ্রামিং ভাষায় ব্যবহৃত হয় (যেমন C, Python, Java) এবং TCP/IP প্রোটোকল স্ট্যাকের মাধ্যমে কাজ করে।
ক্লায়েন্ট-সার্ভার মডেল তৈরি করা:
নেটওয়ার্ক সংযোগ স্থাপন করা:
ডেটা ট্রান্সফার পরিচালনা করা:
send()
এবং recv()
। এটি ক্লায়েন্ট এবং সার্ভারের মধ্যে সঠিকভাবে ডেটা ট্রান্সফার নিশ্চিত করতে সাহায্য করে।কানেকশন ম্যানেজমেন্ট:
accept()
), সংযোগের জন্য অপেক্ষা করতে (listen()
), এবং ক্লায়েন্টের সাথে সংযোগ স্থাপন করতে (connect()
) সহায়ক হয়।আন্তঃপ্রসেস যোগাযোগ (IPC) প্রদান করা:
নেটওয়ার্ক অ্যাপ্লিকেশন ডেভেলপমেন্ট:
রিয়েল-টাইম কমিউনিকেশন:
কাস্টম প্রোটোকল এবং সার্ভিস তৈরি:
ইন্টার-প্রসেস কমিউনিকেশন (IPC):
নেটওয়ার্কিং এবং সিকিউরিটি টুলস:
Socket API ব্যবহার করে একটি সাধারণ TCP ক্লায়েন্ট-সার্ভার মডেল তৈরি করা যায়। নিচে একটি উদাহরণ হিসেবে TCP সার্ভার এবং ক্লায়েন্টের মধ্যে যোগাযোগের একটি প্রক্রিয়া দেখানো হলো:
TCP সার্ভার উদাহরণ
int sockfd, new_sock;
struct sockaddr_in server_addr, client_addr;
socklen_t addr_size;
char buffer[1024];
// Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// সার্ভার ঠিকানা সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = INADDR_ANY;
// Binding
bind(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
// Listening
listen(sockfd, 5);
// Accepting Connection
addr_size = sizeof(client_addr);
new_sock = accept(sockfd, (struct sockaddr*)&client_addr, &addr_size);
// ডেটা পাঠানো এবং গ্রহণ
recv(new_sock, buffer, 1024, 0);
send(new_sock, "Hello, Client!", strlen("Hello, Client!"), 0);
// Socket বন্ধ করা
close(new_sock);
close(sockfd);
TCP ক্লায়েন্ট উদাহরণ
int sockfd;
struct sockaddr_in server_addr;
char buffer[1024];
// Socket তৈরি করা
sockfd = socket(AF_INET, SOCK_STREAM, 0);
// সার্ভার ঠিকানা সেটআপ করা
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(8080);
server_addr.sin_addr.s_addr = inet_addr("127.0.0.1");
// সার্ভারের সাথে সংযোগ স্থাপন করা
connect(sockfd, (struct sockaddr*)&server_addr, sizeof(server_addr));
// ডেটা পাঠানো এবং গ্রহণ
send(sockfd, "Hello, Server!", strlen("Hello, Server!"), 0);
recv(sockfd, buffer, 1024, 0);
// Socket বন্ধ করা
close(sockfd);
common.read_more